package com.mentalhealth.diary.controller;

import com.mentalhealth.diary.common.R;
import com.mentalhealth.diary.entity.Diary;
import com.mentalhealth.diary.mapper.DiaryMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 日记控制器
 * 处理日记的增删改查功能
 */
@RestController
@RequestMapping("/api/diary")
public class DiaryController {

    @Autowired
    private DiaryMapper diaryMapper;
    
    /**
     * 创建新日记
     * @param diary 日记对象
     * @param userId 当前用户ID
     * @return 创建结果
     */
    @PostMapping
    public R<Diary> createDiary(@RequestBody Diary diary, @RequestAttribute("userId") Long userId) {
        // 设置用户ID
        diary.setUserId(userId);
        
        // 设置创建时间和更新时间
        diary.setCreatedTime(System.currentTimeMillis());
        diary.setUpdatedTime(System.currentTimeMillis());
        
        // 保存日记
        int result = diaryMapper.insert(diary);
        if (result > 0) {
            return R.success(diary);
        } else {
            return R.error("创建日记失败");
        }
    }
    
    /**
     * 获取用户的日记列表
     * @param userId 当前用户ID
     * @param params 查询参数（页码、每页数量等）
     * @return 日记列表
     */
    @GetMapping
    public R<List<Diary>> getDiaryList(@RequestAttribute("userId") Long userId, @RequestParam Map<String, Object> params) {
        // 构建查询条件
        Map<String, Object> queryParams = new java.util.HashMap<>();
        queryParams.put("userId", userId);
        
        // 支持按日期范围查询
        if (params.containsKey("startDate")) {
            queryParams.put("startDate", params.get("startDate"));
        }
        if (params.containsKey("endDate")) {
            queryParams.put("endDate", params.get("endDate"));
        }
        
        // 查询日记列表
        List<Diary> diaryList = diaryMapper.selectList(queryParams);
        
        return R.success(diaryList);
    }
    
    /**
     * 获取日记详情
     * @param id 日记ID
     * @param userId 当前用户ID
     * @return 日记详情
     */
    @GetMapping("/{id}")
    public R<Diary> getDiaryDetail(@PathVariable Long id, @RequestAttribute("userId") Long userId) {
        // 查询日记
        Diary diary = diaryMapper.selectById(id);
        
        if (diary == null) {
            return R.error("日记不存在");
        }
        
        // 验证日记所属权
        if (!diary.getUserId().equals(userId)) {
            return R.error("无权访问该日记");
        }
        
        return R.success(diary);
    }
    
    /**
     * 更新日记
     * @param id 日记ID
     * @param diary 更新后的日记内容
     * @param userId 当前用户ID
     * @return 更新结果
     */
    @PutMapping("/{id}")
    public R<Diary> updateDiary(@PathVariable Long id, @RequestBody Diary diary, @RequestAttribute("userId") Long userId) {
        // 查询原日记
        Diary oldDiary = diaryMapper.selectById(id);
        
        if (oldDiary == null) {
            return R.error("日记不存在");
        }
        
        // 验证日记所属权
        if (!oldDiary.getUserId().equals(userId)) {
            return R.error("无权修改该日记");
        }
        
        // 更新字段
        diary.setId(id);
        diary.setUserId(userId); // 确保用户ID不变
        diary.setUpdatedTime(System.currentTimeMillis());
        
        // 执行更新
        int result = diaryMapper.updateById(diary);
        if (result > 0) {
            return R.success(diary);
        } else {
            return R.error("更新日记失败");
        }
    }
    
    /**
     * 删除日记
     * @param id 日记ID
     * @param userId 当前用户ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public R<String> deleteDiary(@PathVariable Long id, @RequestAttribute("userId") Long userId) {
        // 查询日记
        Diary diary = diaryMapper.selectById(id);
        
        if (diary == null) {
            return R.error("日记不存在");
        }
        
        // 验证日记所属权
        if (!diary.getUserId().equals(userId)) {
            return R.error("无权删除该日记");
        }
        
        // 执行删除
        int result = diaryMapper.deleteById(id);
        if (result > 0) {
            return R.success("删除成功");
        } else {
            return R.error("删除失败");
        }
    }
    
    /**
     * 获取日记统计信息
     * @param userId 当前用户ID
     * @return 统计信息
     */
    @GetMapping("/stats/summary")
    public R<Map<String, Object>> getDiaryStats(@RequestAttribute("userId") Long userId) {
        // 查询日记总数
        Long totalCount = diaryMapper.countByUserId(userId);
        
        // 查询本月日记数
        Map<String, Object> monthParams = new java.util.HashMap<>();
        monthParams.put("userId", userId);
        monthParams.put("isThisMonth", true);
        Long monthCount = diaryMapper.countByUserId(monthParams);
        
        // 构建统计结果
        Map<String, Object> stats = new java.util.HashMap<>();
        stats.put("totalCount", totalCount);
        stats.put("monthCount", monthCount);
        
        return R.success(stats);
    }
}